home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Internet Tools 1993 July / Internet Tools.iso / RockRidge / mail / smail-3.1.28 / pd / sdbm / dbd.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-05-12  |  1.8 KB  |  117 lines

  1. /* @(#)pd/sdbm/dbd.c    1.1 5/12/92 %U&% */
  2. /*
  3.  * dbd - dump a dbm data file
  4.  */
  5.  
  6. #include "defs.h"
  7. #include "sdbm.h"
  8. #include <stdio.h>
  9. #ifdef UNIX_BSD
  10. #include <sys/file.h>
  11. #else
  12. #include <fcntl.h>
  13. #endif
  14.  
  15. char *progname;
  16. extern void oops();
  17.  
  18.  
  19. #define empty(page)    (((short *) page)[0] == 0)
  20.  
  21. int
  22. main(argc, argv)
  23. char **argv;
  24. {
  25.     int n;
  26.     char *p;
  27.     char *name;
  28.     int pagf;
  29.  
  30.     progname = argv[0];
  31.  
  32.     if (p = argv[1]) {
  33.         name = (char *) malloc((n = strlen(p)) + 5);
  34.         strcpy(name, p);
  35.         strcpy(name + n, ".pag");
  36.  
  37.         if ((pagf = open(name, O_RDONLY)) < 0)
  38.             oops("cannot open %s.", name);
  39.  
  40.         sdump(pagf);
  41.     }
  42.     else
  43.         oops("usage: %s dbname", progname);
  44.     return 0;
  45. }
  46.  
  47. sdump(pagf)
  48. int pagf;
  49. {
  50.     register r;
  51.     register n = 0;
  52.     register o = 0;
  53.     char pag[PBLKSIZ];
  54.  
  55.     while ((r = read(pagf, pag, PBLKSIZ)) > 0) {
  56.         if (!okpage(pag))
  57.             fprintf(stderr, "%d: bad page.\n", n);
  58.         else if (empty(pag))
  59.             o++;
  60.         else
  61.             dispage(pag);
  62.         n++;
  63.     }
  64.  
  65.     if (r == 0)
  66.         fprintf(stderr, "%d pages (%d holes).\n", n, o);
  67.     else
  68.         oops("read failed: block %d", n);
  69. }
  70.  
  71.  
  72. #ifdef OLD
  73. dispage(pag)
  74. char *pag;
  75. {
  76.     register i, n;
  77.     register off;
  78.     register short *ino = (short *) pag;
  79.  
  80.     off = PBLKSIZ;
  81.     for (i = 1; i < ino[0]; i += 2) {
  82.         printf("\t[%d]: ", ino[i]);
  83.         for (n = ino[i]; n < off; n++)
  84.             putchar(pag[n]);
  85.         putchar(' ');
  86.         off = ino[i];
  87.         printf("[%d]: ", ino[i + 1]);
  88.         for (n = ino[i + 1]; n < off; n++)
  89.             putchar(pag[n]);
  90.         off = ino[i + 1];
  91.         putchar('\n');
  92.     }
  93. }
  94. #else
  95. dispage(pag)
  96. char *pag;
  97. {
  98.     register i, n;
  99.     register off;
  100.     register short *ino = (short *) pag;
  101.  
  102.     off = PBLKSIZ;
  103.     for (i = 1; i < ino[0]; i += 2) {
  104.         for (n = ino[i]; n < off; n++)
  105.             if (pag[n] != 0)
  106.                 putchar(pag[n]);
  107.         putchar('\t');
  108.         off = ino[i];
  109.         for (n = ino[i + 1]; n < off; n++)
  110.             if (pag[n] != 0)
  111.                 putchar(pag[n]);
  112.         putchar('\n');
  113.         off = ino[i + 1];
  114.     }
  115. }
  116. #endif
  117.